//
//  TimeInterval+QZSwiftUI.swift
//  CrseAsst
//
//  Created by 申铭 on 2024/2/27.
//

import Foundation

extension TimeInterval {
    // MARK: - 时间转换
    
    /// TimeInterval（秒）格式化成时分秒
    /// - Parameters:
    ///   - sh: 是否显示小时
    ///   - sm: 是否显示分钟
    ///   - ss: 是否显示秒
    ///   - needZero: 序列化后首位是否需要0，例：02小时<->2小时， 07分钟<->7分钟
    /// - Returns: 🌰例子：02小时02分02秒
    public func formatHMS(sh: Bool = true, sm: Bool = true, ss: Bool = true, needZero: Bool = true) -> String {
        let timeStamp = Int64(self)

        let s = timeStamp % 60
        var m = timeStamp % 3600 / 60
        let h = timeStamp / 3600
        
        // xx小时xx分xx秒
        if sh && sm && ss {
            if needZero {
                return String(format: "%.2d小时%.2d分%.2d秒", h, m, s)
            } else {
                return String(format: "%d小时%.2d分%.2d秒", h, m, s)
            }
        }

        // xx小时xx分
        if sh && sm {
            if needZero {
                return String(format: "%.2d小时%.2d分", h, m)
            } else {
                return String(format: "%d小时%.2d分", h, m)
            }
        }

        // xx分xx秒
        if sm && ss {
            m = timeStamp / 60
            if needZero {
                return String(format: "%.2d分%.2d秒", m, s)
            } else {
                return String(format: "%d分%.2d秒", m, s)
            }
        }
        
        // 时
        if sh {
            if needZero {
                return String(format: "%.2d小时", h)
            } else {
                return String(format: "%d小时", h)
            }
        }

        // 分
        if sm {
            m = timeStamp / 60
            if needZero {
                return String(format: "%.2d分", m)
            } else {
                return String(format: "%d分", m)
            }
        }

        // 秒
        if ss {
            return "\(timeStamp)"
        }
        
        return "\(timeStamp)"
    }
    
    /// 格式化秒时间戳
    /// - Parameter dateFormat: "yy-MM-dd HH:mm:ss"
    /// - Returns: 🌰例子：22-12-09 10:03:06
    public func formatTime(_ dateFormat: String = "yy-MM-dd HH:mm:ss") -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = dateFormat
        let date = Date(timeIntervalSince1970: self)
        return formatter.string(from: date)
    }
}
